gray-matter-rs
A rust implementation of gray-matter.
Support Parsers
- toml
- yaml
- json
- ... (more custom parsers)
Usage
Add Dependency
Append this crate to the Cargo.toml
:
[dependencies]
gray_matter = "0.1"
Parse
use gray_matter::matter::Matter;
use gray_matter::engine::yaml::YAML;
use gray_matter::entity::ParsedEntityStruct;
use serde::Deserialize;
fn main() {
let matter: Matter<YAML> = Matter::new();
let input = r#"---
title: gray-matter-rs
tags:
- gray-matter
- rust
---
Some excerpt
---
Other stuff"#;
let result = matter.matter(input);
println!("content: {:?}", result.content);
println!("excerpt: {:?}", result.excerpt);
println!("title: {:?}", result.data["title"].as_string().unwrap());
println!("tags[0]: {:?}", result.data["tags"][0].as_string().unwrap());
println!("tags[1]: {:?}", result.data["tags"][1].as_string().unwrap());
#[derive(Deserialize, Debug)]
struct FrontMatter {
title: String,
tags: Vec<String>
}
let front_matter: FrontMatter = result.data.deserialize().unwrap();
println!("{:?}", front_matter);
let result_with_struct: ParsedEntityStruct<FrontMatter> = matter.matter_struct(input);
println!("{:?}", result_with_struct.data)
}
Custom Delimiters
use gray_matter::matter::Matter;
use gray_matter::engine::yaml::YAML;
use gray_matter::entity::ParsedEntityStruct;
use serde::Deserialize;
fn main() {
let mut matter: Matter<YAML> = Matter::new();
matter.delimiter = "~~~";
matter.excerpt_separator = "<!-- endexcerpt -->";
#[derive(Deserialize, Debug)]
struct FrontMatter {
abc: String,
}
let result: ParsedEntityStruct<FrontMatter> = matter.matter_struct(
"~~~\nabc: xyz\n~~~\nfoo\nbar\nbaz\n<!-- endexcerpt -->\ncontent".to_string(),
);
}
Contribution
If you need more parser engines, feel free to create a PR to help me complete this crate.